#! /usr/bin/env python

import argparse
import os
import sys
import json
import hashlib
import socket

ffshare_version = '1.2.0'
ffshare_cmds = ['#send', '#recv']
g_debug = False

def debug(*args, **kwargs):
    if g_debug:
        print(*args, **kwargs)

conf = {}

def load_conf():
    conf_home = os.getenv('FFSHARE_CONFIG_HOME', os.path.expanduser('~') + '/.config/ffshare')
    conf_file = conf_home + '/' + 'config.json'
    data = None
    try:
        with open(conf_file, 'r', encoding='utf-8') as file:
            data = json.load(file)
    except Exception  as e:
        print(f'JSON: [file: {conf_file}] {e}')
    
    return data

################################################################################
# core tasks
################################################################################
def send_task():
    pass

def recv_task():
    pass

def read_task():
    pass

def write_task():
    pass

def ui_task():
    pass

################################################################################
# connect to server
################################################################################
def handshake(client_socket, name, cmd):
    def get_key(token):
        SALT = '18df1c9e79dbf27b1008a5f25c4d4213cb90b44c'
        sha1 = hashlib.sha1()
        sha1.update((token + SALT).encode('utf-8'))
        return sha1.hexdigest()

    try:
        bytes = client_socket.recv(1024)  # 1024 字节
        token = bytes.decode('utf-8')
        key = get_key(token)
        data = {
            "key": key,
            "name": name,
            "cmd": cmd,
            "ver": ffshare_version
        }
        rsp = json.dumps(data)
        client_socket.sendall(rsp.encode('utf-8'))
    except Exception as e:
        pass
        
    pass

def start_tcp_client(name, cmd):
    # 创建一个TCP/IP套接字
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 连接到服务器（此处假设服务器的IP为'localhost'，端口为 12345）
    server_address = ('localhost', 12345)
    client_socket.connect(server_address)
    print(f"connected to server {server_address}")

    handshake(client_socket, name, cmd)

################################################################################
# config and params
################################################################################
def load_config():
    pass

if __name__ == '__main__':
    ###########################################################################
    # Parse Args
    ###########################################################################
    parser = argparse.ArgumentParser(description='Fast File Share')
    parser.add_argument('-s', '--send', type=str, help='send file with path')
    parser.add_argument('-r', '--recv', type=str, help='recv file with path')
    parser.add_argument('-g', '--debug', action='store_true', help='show debug info')
    parser.add_argument('-v', '--version', action='store_true', help='show version')
    args = parser.parse_args()

    # print help when nothing input
    if len(sys.argv) == 1:
        parser.print_help()
        sys.exit(1)

    # parse debug
    g_debug = args.debug

    # parse input
    cmd = ''
    path = ''
    if args.send:
        cmd = ffshare_cmds[0]
        path = args.send
        debug(f'send: {args.send}')
    if args.recv:
        cmd = ffshare_cmds[1]
        path = args.recv
        debug(f'recv: {args.recv}')

    if args.version:
        print(f'ffshare version: {ffshare_version}')

    ###########################################################################
    # Start TCP Client
    ###########################################################################
    start_tcp_client('Ubuntu', cmd)
    pass